## 介绍
- 将new 操作单独封装
- 遇到new 时，就要考虑是否该使用工厂模式

示例  
- 你去购买汉堡，直接点餐、取餐，不会自己亲手做  
- 商店要“封装”做汉堡的工作，做好直接给买者

## 代码演示
```js 
class Product{
    constructor(name){
        this.name = name;
    }

    init(){ alert('init')}
    fn1(){ alert('fn1')}
    fn2(){ alert('fn2')}

}

class Creator{
    create(name){
        return new Product(name)
    }
}

let creator = new Creator();
let p = create.create('p1');
p.init();
p.fun1();

```
## 场景

- ``` jquery: $('div')```
- ``` React.createElement ```
- vue 异步组件

＄("div）和new ＄(‘'div’）有何区别？  
第一：书写麻烦,jQuery 的链式操作将成为噩梦  
第二：一旦jQuery 名字变化，将是灾难性的

- React.createElement  
```js 
var profile = <div>
    <img src="xx.jpg" className="profile" />
    <h3>{[1,2].join(' ')}</h3>
    </div>


// 调用方法
var result = React.createElement('div',null,
    React.crèateElement ("img", { sre: "avatar.png", className: "profile" }),
    React.createElement ("h3", null, [1,2].join( ""))
)
```
设计原则验证 

- 构造函数和创建者分离
- 符合开放封闭原则

